package repo

import (
	"context"
	"github.com/star-find-cloud/star-chat/user/domain"
)

type UserRepo interface {
	// Create 创建用户
	Create(ctx context.Context, user *domain.User) (int64, error)

	// GetAll 获取用户所有元数据
	GetAll(ctx context.Context, id int64) (*domain.User, error)
	// GetByID 通过ID获取用户非敏感元数据
	GetByID(ctx context.Context, id int64) (*domain.User, error)
	// GetByEmail 通过邮箱获取用户非敏感元数据
	GetByEmail(ctx context.Context, email string) (*domain.User, error)
	// GetByPhone 通过手机号获取用户非敏感元数据 参数为 手机国家码和手机号
	GetByPhone(ctx context.Context, countryCode, phone int64) (*domain.User, error)
	// CheckPassword 验证用户密码
	CheckPassword(ctx context.Context, id int64, password string) (bool, error)

	// Update 修改用户信息
	Update(ctx context.Context, user *domain.User) error
	// UpdatePassword 修改用户密码
	UpdatePassword(ctx context.Context, id int64, newPassword string) error
	// UpdatePhone 修改用户手机号
	UpdatePhone(ctx context.Context, id, countryCode, Phone int64) error
	// UpdateAvatar 修改用户头像
	UpdateAvatar(ctx context.Context, id, avatarID int64) error
	// UpdateStatus 修改用户状态
	UpdateStatus(ctx context.Context, id, status int64) error

	// Delete 删除用户
	Delete(ctx context.Context, id int64) error

	// IsExistsByID 通过判断用户是否存在
	IsExistsByID(ctx context.Context, id int64) (bool, error)
	// IsExistsByPhone 通过电话号码判断用户是否存在
	IsExistsByPhone(ctx context.Context, countryCode, phone int64) (bool, error)
	// IsExistsByEmail 通过邮箱判断用户是否存在
	IsExistsByEmail(ctx context.Context, email string) (bool, error)

	// CheckEmailVerificationCode 验证邮箱验证码
	CheckEmailVerificationCode(ctx context.Context, email string, verificationCode string) (bool, error)
}
